﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//给定一个长度为 n 的非降序数组和一个非负数整数 k ，要求统计 k 在数组中出现的次数
//
//数据范围：0≤𝑛≤1000,0≤𝑘≤1000≤n≤1000, 0≤k≤100，数组中每个元素的值满足0≤𝑣𝑎𝑙≤1000≤val≤100要
//求：空间复杂度𝑂(	1)O(1)，时间复杂度𝑂(𝑙𝑜𝑔	𝑛O(logn)
//int GetNumberOfK(int* nums, int numsLen, int k) 
//{
//    int i = 0;
//    int count = 0;
//    for (i = 0; i < numsLen; i++)
//    {
//        if (*(nums + i) == k)
//        {
//            count++;
//        }
//    }
//    return count;
//}
//int main()
//{
//
//	return 0;
//}
//整数转换。编写一个函数，确定需要改变几个位才能将整数A转成整数B。

//示例1:
//
//输入：A = 29 （或者0b11101）, B = 15（或者0b01111）
//输出：2

//int convertInteger(int A, int B) {
//    int n = 0;
//    int i = 0;
//    n = A ^ B;
//    int count = 0;
//    for (i = 0; i < 32; i++)
//    {
//        if ((n >> i) & 1)
//        {
//            count++;
//        }
//    }
//    return count;
//}
//模拟memcpy的实现
//#include <stdio.h>
//#include <assert.h>
//void* my_memcpy(void* dest, const void* src, size_t num)
//{
//	assert(dest && src);
//	void* ret = dest;
//	while (num--)
//	{
//		*(char*)dest = *(char*)src;
//		dest = (char*)dest + 1;
//		src = (char*)src + 1;
//	}
//	return ret;
//}
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int arr2[10] = { 0 };
//	my_memcpy(arr2, arr1,20);
//	for (int i = 0; i < 5; i++)
//	{
//		printf("%d", arr2[i]);
//	}
//	return 0;
//}
//memmove的模拟实现
#include <stdio.h>
#include<assert.h>
void* my_memmove(void* dest, const void* src, size_t num)
{
	assert(dest && src);
	if (dest < src)
	{
		//前->后
		while (num--)
		{
			*(char*)dest = *(char*)src;
					dest = (char*)dest + 1;
					src = (char*)src + 1;
		}
	}
	else
	{
		//后->前
		while (num--)
		{
			*((char*)dest + num) = *((char*)src + num);
		}
	}
}
int main()
{
	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10 };
	my_memmove(arr1 + 2, arr1, 20);
	for (int i = 0; i < 10; i++)
	{
		printf("%d", arr1[i]);
     }
	return 0;
}